home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Reference Guide / C-C++ Interactive Reference Guide.iso / c_ref / csource5 / 349_01 / sss.arc / EX_0804.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-10  |  1.7 KB  |  83 lines

  1. /* Program EX_0804.C
  2.    Listing 16C - see documentation in TUTOR.SSS
  3. */
  4.  
  5. #include <stdio.h>
  6.  
  7. #include "SSSC.H"
  8.  
  9. #define  ARRIVL  1
  10. #define  STARTA  2
  11. #define  ENDACT  3
  12. #define  NEXTAC  4
  13.  
  14. #define  TIMEL   150
  15.  
  16. int  n, server, ecode;
  17. FILE *f;
  18. char *outpr =
  19.      "At %7.2f q size:%3d ave q:%4.1f std:%5.2f\n";
  20.  
  21. void prime()
  22. {
  23.   n = 0;
  24.   server = 1;
  25.   INIQUE(1,0,1);
  26.   CREATE(0, n);
  27.   SIMEND(TIMEL);
  28.   f = fopen("sss.prn", "w");
  29.   if (f == NULL)
  30.     { puts("Cannot open SSS.PRN"); exit(1); }
  31. }
  32.  
  33. main()
  34. {
  35.   prime();
  36.  
  37.   do
  38.   {
  39.     if ((ecode = NEXTEV()) > 0)
  40.     switch(ecode)
  41.     {
  42.  
  43.       case ARRIVL :
  44.               n = n + 1;
  45.               CREATE(EX(1), n);
  46.               SCHED(0, NEXTAC, IDE());
  47.               break;
  48.  
  49.       case NEXTAC :
  50.               if (server > 0) SCHED(0, STARTA, IDE());
  51.               else
  52.               {
  53.                 QUEUE(1, 0);
  54.                 fprintf(f, "%7.2f %3d %4.1f %5.2f\n",
  55.                         T(), NQ(1), QAVG(1), QSTD(1));
  56.                 printf(outpr, T(), NQ(1), QAVG(1),
  57.                               QSTD(1));
  58.               }
  59.               break;
  60.  
  61.       case STARTA :
  62.               SCHED(EX(0.9), ENDACT, IDE());
  63.               server = server - 1;
  64.               break;
  65.  
  66.       case ENDACT :
  67.               DISPOS();
  68.               server = server + 1;
  69.               if (NQ(1))
  70.               {
  71.                 REMVFQ(1,1);
  72.                 SCHED(0, STARTA, IDE());
  73.                 fprintf(f, "%7.2f %3d %4.1f %5.2f\n",
  74.                         T(), NQ(1), QAVG(1), QSTD(1));
  75.                 printf(outpr, T(), NQ(1), QAVG(1),
  76.                               QSTD(1));
  77.               }
  78.               break;
  79.  
  80.     }
  81.   } while(ecode);
  82. }
  83.